import axios from 'axios'




// 表示基础路径
// axios.defaults.baseURL = 'http://ludir.cn:8888/api/private/v1/'

// 表示请求超时
axios.defaults.timeout = 5000
// 关于post 清除 格式的的处理
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'


//  关于环境变量 的配置
// 开发环境

console.log(process.env.NODE_ENV)

if (process.env.NODE_ENV === 'development') {
  axios.defaults.baseURL = 'http://ludir.cn:8888/api/private/v1/'

} else if (process.env.NODE_ENV == 'debug') {

  // 测试环境
  axios.defaults.baseURL = 'https://www.ceshi.com'

} else {
  // 线上环境
  axios.defaults.baseURL = 'https://www.production.com'
}



// 添加请求拦截器
axios.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  //  统一携带token  
  // 每次发送请求之前判断vuex/pinia中是否存在token        
  // 如果存在，则统一在http请求的header都加上token，这样后台根据token判断登录情况
  // 即使本地存在token，也有可能token是过期的，所以在响应拦截器中要对返回状态进行判断 
  console.log("config", config)

  // let token = '我是token'
  // token && (config.headers['Authorization'] = token)
  let token = "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjUwMCwicmlkIjowLCJpYXQiOjE2Nzg0MzkwOTYsImV4cCI6MTY3ODUyNTQ5Nn0.EAa5ZoefLutiZigdU72pUlB3oPaBi2y8eEXSo2Qri2A"

  config.headers['Authorization'] = token



  return config     // 必须return 
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
  // 2xx 范围内的状态码都会触发该函数。
  // 对响应数据做点什么


  // 如果返回的状态码为200，说明接口请求成功，可以正常拿到数据     
  // 否则的话抛出错误
  if (response.status == 200) {
    return Promise.resolve(response.data)
  } else {
    return Promise.reject(response)
  }






  return response.data
}, function (error) {
  // 超出 2xx 范围的状态码都会触发该函数。
  // 对响应错误做点什么

  // 服务器状态码不是2开头的的情况
  // 这里可以跟后台开发人员协商好统一的错误状态码    
  // 然后根据返回的状态码进行一些操作，例如登录过期提示，错误提示等等
  // 下面列举几个常见的操作，其他需求可自行扩展

  if (error.response.status) {

    // 401: 未登录
    // 未登录则跳转登录页面，并携带当前页面的路径
    // 在登录成功后返回当前页面，这一步需要在登录页操作

  }



  return Promise.reject(error)
})




export function get (url, params) {

  //  返回一个promise  
  return axios.get(url, { params: params })


}



export function post (url, params) {

  return axios.post(url, params)
}



